home *** CD-ROM | disk | FTP | other *** search
/ Softdisk Supreme / Softdisk Supreme.iso / pc / DSK Files / 0-49 / SD010b.dsk / ALL.BASE.CONVERTER.bas next >
BASIC Source File  |  2003-06-12  |  5KB  |  110 lines

  1. 5  REM SEND TO MAGAZETTE
  2. 10  GOTO 90
  3. 20  ON A GOTO 110,120,610,630,640,670,930,940,950,960
  4. 30  REM DELETE ALL LINES LISTED
  5. 40  REM IN THE ON 'A' GOTO
  6. 50  REM THEN DELETE LINE 10 THRU
  7. 60  REM THIS ONE, TO MAKE A GOOD
  8. 70  REM UTILITY PROGRAM
  9. 75  REM THIS PROGRAM DOES NOT
  10. 76  REM REFERENCE ANY REM WITH
  11. 77  REM A GOTO OR GOSUB, THEY
  12. 78  REM CAN ALL BE DELETED.
  13. 80  REM <CTRL-J>*************************   *                       *   *    BASE  CONVERTER    *   *      TITLE PAGE       *   *                       *   *************************
  14. 90  HOME 
  15. 100  VTAB 2: HTAB 12: INVERSE : PRINT " BASE CONVERSION ": NORMAL 
  16. 110  RESTORE 
  17. 120  FOR K = 1 TO 10: READ MG$(K): NEXT K
  18. 130  IF P = 1  THEN 150
  19. 140  FOR K = 0 TO 2200: PRINT ;: NEXT 
  20. 150 N$ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  21. 160  VTAB 4: CALL  -958
  22. 170 M =  LEN(N$)
  23. 180  VTAB 5: HTAB 10
  24. 190  PRINT "USE BASE TEN NOTATION"
  25. 200  VTAB 8
  26. 210  PRINT "CONVERT FROM"
  27. 220  PRINT "BASE ";
  28. 230  INPUT B1$
  29. 240  IF B1$ =  CHR$(0)  THEN 160
  30. 250  IF B1$ = "0"  THEN 160
  31. 260  REM <CTRL-J>************************    *                      *    *     TEST BASE 1      *    *                      *    ************************
  32. 270 B1 =  VAL(B1$)
  33. 280  IF B1 >1  AND B1 <37  THEN 320
  34. 290  VTAB 23: HTAB 2: INVERSE 
  35. 300  PRINT "BASE 2 THROUGH 36 ONLY. SELECT AGAIN": NORMAL 
  36. 310  GOTO 180
  37. 320  VTAB 8: HTAB 26
  38. 330  PRINT "CONVERTED TO"
  39. 340  HTAB 26: PRINT "BASE ";
  40. 350  INPUT B2$
  41. 360  IF B2$ = "0"  THEN 160
  42. 370  IF B2$ = ""  THEN 160
  43. 380  REM <CTRL-J>************************    *                      *    *     TEST  BASE 2     *    *                      *    ************************
  44. 390 B2 =  VAL(B2$)
  45. 400  IF B2 >1  THEN 440
  46. 410  VTAB 23
  47. 420  PRINT "  BASE 2 THROUGH 36 ONLY. SELECT AGAIN. ";
  48. 430  GOTO 320
  49. 440  IF B2 >M  THEN 410
  50. 445  REM <CTRL-J>*** INPUT NUMBER ***<CTRL-J>
  51. 450  VTAB 12: CALL  -958
  52. 460  PRINT "VALUE IN BASE ";B1;" TO CONVERT";
  53. 470  INPUT S$
  54. 475  REM <CTRL-J>*** TEST INPUT ***<CTRL-J>
  55. 480 L =  LEN(S$)
  56. 490  IF S$ = "0"  THEN 450
  57. 500  IF S$ = ""  THEN 450
  58. 510  FOR K = 1 TO L
  59. 520  IF  MID$ (S$,K,1) = "."  THEN  VTAB 12: CALL  -958: INVERSE : PRINT "WHOLE NUMBERS ONLY, NO DECIMALS": FOR J = 0 TO 3000: NEXT J: NORMAL : GOTO 450
  60. 530  NEXT K
  61. 540 Q = 0
  62. 550  FOR K = 1 TO L
  63. 560  FOR J = 1 TO B1
  64. 570  IF  MID$ (S$,K,1) =  MID$ (N$,J,1)  THEN Q = Q +1
  65. 580  NEXT J: NEXT K
  66. 590  IF L >Q  THEN  GOSUB 980: GOTO 450
  67. 600  REM <CTRL-J>************************    *                      *    *    FIRST  CONVERT    *    *      TO BASE 10      *    *                      *    ************************
  68. 610 Y1 = Y1 +1
  69. 620  VTAB 19: HTAB 10
  70. 630  INVERSE : PRINT MG$(Y1): NORMAL 
  71. 640  IF Y1 = 10  THEN Y1 = 0
  72. 650  IF L >7  THEN  VTAB 23: INVERSE : PRINT "  ANSWER MAYBE WRONG, NUMBER TOO LONG  ";
  73. 660  NORMAL 
  74. 670  FOR K = 1 TO 500 *L: NEXT K
  75. 675  REM <CTRL-J><CTRL-J>************************    *                      *    *   THE HEART OF THE   *    *       PROGRAM        *    *   THE NEXT 7 LINES   *    *                      *    ************************
  76. 680 D = 0
  77. 690  FOR K = 1 TO L
  78. 700  FOR J = 1 TO B1
  79. 710  IF  MID$ (N$,J,1) < > MID$ (S$,K,1)  THEN 730
  80. 720 D = D + INT(((J -1) *(B1 ^(L -K)) +.5))
  81. 730  NEXT J
  82. 740  NEXT K
  83. 750  REM <CTRL-J>***********************     *                     *     * CONVERT FOR OUTPUT  *     *                     *     ***********************
  84. 760 A$ = " "
  85. 770 X =  INT(((D/B2) - INT(D/B2)) *B2 +1.5)
  86. 780 A$ =  MID$ (N$,X,1) +A$
  87. 790 D =  INT(D/B2)
  88. 800  IF D >0  THEN 770
  89. 810  REM <CTRL-J>***********************     *                     *     *    PRINT RESULTS    *     *                     *     ***********************
  90. 820  VTAB 15: HTAB 1: PRINT S$;" ";: INVERSE : PRINT " BASE ";: NORMAL : PRINT " ";B1;"  =   "
  91. 830  VTAB 17: HTAB 18: PRINT A$;" ";: INVERSE : PRINT " BASE ";: NORMAL : PRINT " ";B2
  92. 840  VTAB 19
  93. 850  PRINT "RETURN TO CONTINUE, ESCAPE TO CHANGE    BASE, CONTROL-C TO QUIT.";: GET Q$
  94. 860  PRINT : PRINT 
  95. 870  IF Q$ =  CHR$(13)  THEN 450
  96. 880  IF Q$ =  CHR$(27)  THEN P = 1: GOTO 90
  97. 890  IF Q$ =  CHR$(3)  THEN 920
  98. 900  GOTO 840
  99. 910  REM <CTRL-J>***********************     *                     *     *       THE END       *     *                     *     ***********************
  100. 920  HOME : PRINT  CHR$(4);"CATALOG": END 
  101. 930  REM <CTRL-J>***********************     *                     *     *    DATA SECTION     *     *                     *     ***********************
  102. 940  DATA  " THAT'S A TOUGH ONE ","  NOW LET ME THINK  "," KEEP YOUR SHIRT ON "," WAIT, I'LL GET IT "
  103. 950  DATA  "  WHAT'S THE RUSH!  ","  HOW MANY MORE?  "," ISN'T IT TIME TO EAT? "," I'M GETTING TIRED "
  104. 960  DATA "  I KNOW- I'M SLOW  ","  IS THIS THE END?  "
  105. 970  REM <CTRL-J>************************    *                      *    *      SUBROUTINE      *    *                      *    ************************
  106. 980  VTAB 10: CALL  -958
  107. 990  VTAB 12: HTAB 13
  108. 1000  INVERSE : PRINT " IMPROPER INPUT ": NORMAL 
  109. 1010  FOR K = 1 TO 3000: NEXT : RETURN 
  110. 1020  REM <CTRL-J>******************          *                *          * WRITTEN BY     *          *   BOB SCOFIELD *          *                *          ******************